{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "A ----------------------------------------> B\n",
    "\n",
    "1 对称加密：信息的加密和解密使用同一把密钥。\n",
    "\n",
    "密钥需通过网络传递，密钥可能被截获，导致信息泄露\n",
    "\n",
    "```\n",
    "理想状态：\n",
    "A(发送密钥) ----------------------------------------> B(收到密钥)\n",
    "A(发送信息，使用密钥加密) ----------------------------------------> B(收到信息，使用密钥解密)\n",
    "A(收到信息，使用密钥解密) <---------------------------------------- B(发送信息，使用密钥加密)\n",
    "\n",
    "\n",
    "信息泄露：密钥存在被拦截的可能。\n",
    "A(发送密钥) ----------> C(复制密钥) ----------> B(收到密钥)\n",
    "A(发送信息，使用密钥加密) ---------- C(收到信息，使用密钥解密) ----------> B(收到信息，使用密钥解密)\n",
    "A(收到信息，使用密钥解密) <---------- C(收到信息，使用密钥解密) <---------- B(发送信息，使用密钥加密)\n",
    "```\n",
    "\n",
    "2 非对称加密：使用公钥加密的信息，只能使用私钥解密。\n",
    "\n",
    "2.1 公钥加密，私钥解密：防止信息被偷看\n",
    "\n",
    "```\n",
    "理想状态：\n",
    "A(发送公钥) ----------------------------------------> B(收到公钥)\n",
    "A(收到信息，使用私钥解密) <---------------------------------------- B(发送信息，使用公钥加密)\n",
    "\n",
    "A(发送公钥) ----------> C(收到公钥) ----------> B(收到公钥)\n",
    "A(收到信息，使用私钥解密) <----------> C(收到信息，无私钥解密) <---------- B(发送信息，使用公钥加密)\n",
    "\n",
    "信息泄露：真实公钥的传输，存在被篡改的可能。\n",
    "A(发送真实公钥) ----------> C(拦截真实公钥，发送虚假公钥) ----------> B(收到虚假公钥)\n",
    "A(收到信息，使用真实私钥解密) <---------- C(收到信息，使用虚假私钥解密，篡改信息，使用真实公钥加密) <---------- B(发送信息，使用虚假公钥加密)\n",
    "```\n",
    "\n",
    "2.2 私钥加密，公钥解密：防止信息被篡改\n",
    "```\n",
    "理想状态：\n",
    "A(发送公钥2) ----------> C(收到公钥2) ----------> B(收到公钥2)\n",
    "私钥加密，公钥解密：中间人无私钥2，无法篡改公钥1，防止信息被篡改\n",
    "A(使用私钥2对公钥1加密) ----------> C(收到私钥2加密的公钥1，可以使用公钥2解密，但是没有私钥2重新加密，无法篡改公钥1) ----------> B(收到私钥2加密的公钥1，使用公钥2解密，获得公钥1)\n",
    "ps：因为C没有私钥2，就算得到了公钥1，他也没办法篡改公钥1，因为一旦篡改，没办法使用私钥2加密，如果C篡改了公钥1，B发送的信息，A使用私钥1解密的信息一定是错误的。\n",
    "公钥加密，私钥解密：中间人无私钥1，无法解密获取信息，防止信息被偷看\n",
    "A(收到信息，使用私钥1解密) <----------> C(收到信息，无私钥1无法解密) <---------- B(发送信息，使用公钥1加密)\n",
    "```\n",
    "\n",
    "以上，私钥加密被称为签名，公钥解密被称为验签。\n",
    "\n",
    "但是公钥2的传输仍然是明文传输，我这里任务，C完全可以篡改公钥2，导致A和B的加密通信无法进行。难道要再给公钥2套一层私钥加密，公钥解密吗？最外层的信息传递总会被篡改。\n",
    "\n",
    "3 可信第三方：把上述2.2的理想状态交给第三方完成，中间人随可以伪造一个第三方的公钥（可信公钥）进行攻击，但中间人伪造的公钥不属于可信的第三方（CA, 证书颁发机构），B可以拒绝通信。\n",
    "\n",
    "为了解决A将公钥2发送给B的过程中，无法保证公钥2被篡改的可能，可将公钥2发送给可信的第三方（拥有可信公钥和可信私钥）  ps：第三方拥有自己的公钥和私钥，为了区分写作可信公钥和可信私钥\n",
    "\n",
    "\n",
    "```\n",
    "A(发送公钥) ----------> 可信第三方(收到公钥，使用可信私钥加密，即数字签名) ----------> A(收到数字签名)\n",
    "可信第三方(发送可信公钥) ----------> B(收到可信公钥)\n",
    "A(发送公钥 + 数字签名) ----------> B(收到公钥 + 数字签名，使用可信公钥对数字签名解密，判断公钥是否被篡改)\n",
    "```\n",
    "\n",
    "HTTPS：增加安全的HTTP，用于在浏览器和服务器之间进行加密、安全通信，防止数据被窃听、篡改、伪造。"
   ],
   "id": "c7111384a2f3f432"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
